# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Maintainer: David Runge <dvzrv@archlinux.org>

pkgname=nextcloud
# NOTE: always check first whether the version is supposed to be packaged:
# https://github.com/nextcloud/server/wiki/Maintenance-and-Release-Schedule
pkgver=26.0.1
pkgrel=1
pkgdesc="A cloud server to store your files centrally on a hardware controlled by you"
arch=(any)
url="https://nextcloud.com"
license=(AGPL3)
makedepends=(php php-legacy)
optdepends=(
  'curl: for webcron jobs from within uwsgi'
  'ffmpeg: for preview generation'
  'libreoffice: for preview generation'
  'mariadb: to use a local MariaDB server'
  'memcached: to use a local memcached server'
  'mod_itk: to use the Apache web server'
  'postgresql: to use a local PostgreSQL server'
  'redis: to use a local Redis server'
  'smbclient: for SMB/CIFS integration'
  'sudo: for privilege elevation in occ command when not run as root'
)
backup=(
  etc/webapps/$pkgname/config/config.php
  etc/webapps/$pkgname/.htaccess
  etc/uwsgi/$pkgname.ini
)
# there are no elf files, no need to strip anything
options=(!strip)
install=$pkgname.install
source=(
  https://download.nextcloud.com/server/releases/$pkgname-$pkgver.tar.bz2{,.asc}
  apache.example.conf
  $pkgname.config.php
  $pkgname.hook
  $pkgname.occ.sh
  $pkgname.sysusers
  $pkgname.tmpfiles
  $pkgname.uwsgi
  $pkgname-cron.service
  $pkgname-cron.timer
)
sha512sums=('058ea33d4fbbf7e8c54dfda71989e95893dc24e0c538d7dbc502f3cd36247d4cfa7e5d32d5d437532229aee8d73fe7e643672835d7207aa3d7990ff455a3372f'
            'SKIP'
            '5f9be223225e6ad2772989c440df8585a852ea0be697274384064ec73df47dab2f5d0847c275732fab26c419a713911d8f77ebc2b639bf6e8ede76272b752cde'
            '92592f9a76ee534d0ae6d3aedf2257c147337debe7e2d6dbec1daff66a682e3abc74611e08662058de314bf3ea6ff1c85efd678674b782d71251c38786e446f9'
            '2791382d7b005c64cd6938695f273e83435cc5f1b785fe7d44d6dbd69864c502847e45d93c4a5f6752a759a660118279e3e22e5bc32f79b8775693fde603a9c5'
            'b54b5a9957f846842603677b21fa79628ab69b5b7e05913dcf631ae2b4fd11d09822429900ab0efc6e75e83f85cc0d8e7d53eb6a4c91e08148ddbed235b2453b'
            '1d06f339c43d57e5f5406c2698b815241fd9e39039a9e55f777face510c9a5ddae5ccd4e051393e8f16f391301a6aa03fff2462837a2d3441d969ea7195e7d84'
            '919008a2bf6cf2492cb1e9c8e28c1e082d74e45da5a96e6669f8971d6cf721e36d23625c89918fe10d8bc1b202c0340aa897849d9ec501a26f3f4572ccb57a98'
            'adff09fa5eb5932aa76f987ae92177fff799c0ca4233c418ba47796078fe1ced9d49e987a57a304a4779d43d8e64dffd8ba69443348810f09c5d5127eadd162f'
            '3d3e22841bbae0b910c1d1dc9cccfff1182f5fd569c39ae76ca7f3828de31d5d91bf0d28524dd397171f027046bfb193845ecfc06bd0abbbc79899acb26306bb'
            'eb69785a5b0df0e2a11f53f9c2e2dbf75681d7c698e88cbcc5ceed713a558d528511cc576813cc083cbaa28a2c83d543a39436ad4805670348ef22634305b1c8')
b2sums=('4d5021353560626fda6cd71f073c4a219e7a4062738edbca5f8a69e138ba7f970588e88f3975c9bb22e7e7a3bb26727972729f569ed7a66cecdc86cccc0fb6cb'
        'SKIP'
        '7d40d120c28291f1a7537f3e1b5049fa83c9c0af949371345ea9ccdf3de4a0f3a3a06edbc52d9254dba483e4d11acf562cf679b9e379c5dfc2f61dfbfc2e4cef'
        '4ad061efbc20b4d0e9f8cfd01c5e8e612fa5af29bce754b77f90c1835b98ee445ef4de3d8c83da91461053622620af14d880eb9014b51f2383c75f1860d479f4'
        'c69f18de513562e32f0f655fee7ef81877d74a76717e2eaad9a13882bf8edd0dad99bec5958e460a4ec32eecfdd425ae009d11ac27af16a3ad1d6498282be32f'
        'c5c4499f588c2b4d90223c00b2c1e575611d4c90c5077d3199cfcdad455ad55ab34db66159ad2c42a2f56db87a844f60ff4cdfd2fdb14df3a52f44e376dd2e3e'
        '1a61a89531636b65dade03cd7edca8747b3e1e880f9bbd4d5a53cffa452d70fe17e345cfed739ae92e99e336d4c1f2633c84a5c84a4ee6da518762bf1396b1db'
        'd132044cb7f1d61a1ce87800d2e1142e3ac385acdec25e2f5ad685603a0ffa88e105f4c35688584d65d287adbb40b8d9a02d6a80d7a0b58bb8801a6769405218'
        'f50b0a19bd680851cda90c581c2aa4cf3db4fa8ea622a409730ef668d4ee37cb4ffd14fd8d5d8c58358ee9616de3a4a83c77b8b8561335e818a73ba527a24c80'
        '3478252d09c5283dc148836e8a1bc6520bee40b19fe9d98c40ef1240b6ede20d8f397400a9901fb188bcf5859bda19e4fe0454ae30aa00d494cdb467ccaf3fc3'
        'e6214351ca16bfe97683e838e727d6b5eaa62194878272204034c62aac4a632c9b33cd31aa0570c2eb936d7e9e7ff60190ac05a3a8cc2e27eda423a7d89b6d39')
validpgpkeys=('28806A878AE423A28372792ED75899B9A724937A') # Nextcloud Security <security@nextcloud.com>

_get_php_versions() {
  local _phps=(php php-legacy)
  local _min _max

  _min=$(sed -nr 's/^.*PHP_VERSION_ID < ([0-9]*).*$/\1/p' $pkgname/lib/versioncheck.php)
  _max=$(sed -nr 's/^.*PHP_VERSION_ID >= ([0-9]*).*$/\1/p' $pkgname/lib/versioncheck.php)
  _min_php="${_min:0:1}.${_min:2:1}"
  _max_php="${_max:0:1}.${_max:2:1}"
  printf "%s requires %s >= php < %s\n" $pkgname $_min_php $_max_php

  _php_interpreter=""
  for _php in "${_phps[@]}"; do
    _php_version=""
    if command -v "$_php" > /dev/null; then
      _php_version="$($_php --version |head -n1 |cut -d ' ' -f2)"
      printf "Detected interpreter: %s (%s)\n" "$_php" "$_php_version"
      if [[ -z "$_php_interpreter" ]]; then
        if [[ "$(vercmp "$_php_version" "$_max_php")" -lt 0 && "$(vercmp "$_php_version" "$_min_php")" -gt 0 ]]; then
          _php_interpreter="$_php"
          _php_interpreter_version="$_php_version"
          printf "Using interpreter for package: %s (%s)\n" "$_php" "$_php_version"
        else
          printf "Skipping interpreter due to incompatibility: %s (%s)\n" "$_php" "$_php_version"
        fi
      fi
    fi
  done
}

check() {
  _get_php_versions
  if [[ "$(vercmp "$_php_interpreter_version" "$_min_php" )" -lt 0 ]]; then
    printf "%s requires php >= %s, but %s is provided\n" $pkgname $_min_php $_php_interpreter_version
    exit 1
  fi
  if [[ "$(vercmp "$_php_interpreter_version" "$_max_php" )" -gt 0 ]]; then
    printf "%s requires php < %s, but %s is provided\n" $pkgname $_max_php $_php_interpreter_version
    exit 1
  fi
}

package() {
  _get_php_versions
  depends=(
    "php-interpreter<$_max_php"
    "php-gd-interpreter<$_max_php"
  )

  # NOTE: due to insufficient package tooling we can not rely on version
  # information in optdepends, which is why we add both php and php-legacy versions
  optdepends+=(
    "php-apache: to use the Apache web server (latest PHP)"
    "php-legacy-apache: to use the Apache web server"
    "php-apcu: for caching with APCU (latest PHP)"
    "php-legacy-apcu: for caching with APCU"
    "php-fpm: to run in fastCGI process manager (latest PHP)"
    "php-legacy-fpm: to run in fastCGI process manager"
    "php-imagick: for preview generation (latest PHP)"
    "php-legacy-imagick: for preview generation"
    "php-memcached: for caching with memcached (latest PHP)"
    "php-legacy-memcached: for caching with memcached"
    "php-pgsql: to use the PostgreSQL database backend (latest PHP)"
    "php-legacy-pgsql: to use the PostgreSQL database backend"
    "php-redis: for caching with redis (latest PHP)"
    "php-legacy-redis: for caching with redis"
    "php-sqlite: to use the SQLite database backend (latest PHP)"
    "php-legacy-sqlite: to use the SQLite database backend"
    "uwsgi-plugin-php: run as application container (latest PHP)"
    "uwsgi-plugin-php-legacy: run as application container"
  )

  cd $pkgname
  # sysusers.d integration
  install -vDm 644 ../$pkgname.sysusers "$pkgdir/usr/lib/sysusers.d/$pkgname.conf"
  # tmpfiles.d integration
  install -vDm 644 ../$pkgname.tmpfiles "$pkgdir/usr/lib/tmpfiles.d/$pkgname.conf"
  # state dir for data and writable apps
  install -vdm 755 "$pkgdir/var/lib/$pkgname/"
  install -vdm 770 "$pkgdir/var/lib/$pkgname/data"
  install -vdm 755 "$pkgdir/var/lib/$pkgname/apps"
  # log dir
  install -vdm 755 "$pkgdir/var/log/$pkgname/"
  # uwsgi integration
  install -vDm 644 ../$pkgname.uwsgi "$pkgdir/etc/uwsgi/$pkgname.ini"
  # config dir
  install -vDm 644 .htaccess -t "$pkgdir/etc/webapps/$pkgname/"
  install -vDm 640 ../$pkgname.config.php "$pkgdir/etc/webapps/$pkgname/config/config.php"
  find config -type f -exec install -vDm 644 {} "$pkgdir/etc/webapps/$pkgname/"{} \;
  # remove config dir and .htaccess from source so that it is not installed to default location
  rm -rf config .htaccess

  # webapp
  find . -type f -not -iname "*.orig" -exec install -vDm 644 {} "$pkgdir/usr/share/webapps/$pkgname/"{} \;

  # symlink config directory into place
  ln -sv /etc/webapps/$pkgname/config "$pkgdir/usr/share/webapps/$pkgname/"
  # symlink .htaccess file into place
  ln -sv /etc/webapps/$pkgname/.htaccess "$pkgdir/usr/share/webapps/$pkgname/"
  # add symlink to default writable apps directory
  ln -sv /var/lib/$pkgname/apps "$pkgdir/usr/share/webapps/$pkgname/wapps"
  # install occ command
  install -vDm 755 occ -t "$pkgdir/usr/share/webapps/$pkgname/"
  # occ script
  install -vDm 755 ../$pkgname.occ.sh "$pkgdir/usr/bin/occ"
  # optional pacman hook
  install -vDm 644 ../$pkgname.hook -t "$pkgdir/usr/share/doc/$pkgname/"
  # apache example conf
  install -vDm 644 ../apache.example.conf -t "$pkgdir/usr/share/doc/$pkgname/"
  # systemd service
  install -vDm 644 ../$pkgname-cron.service -t "$pkgdir/usr/lib/systemd/system/"
  install -vDm 644 ../$pkgname-cron.timer -t "$pkgdir/usr/lib/systemd/system/"
}
